<?php
/**
 * @author shurik2533
 * Класс предоставляет методы для работы с таблицей пользователей.
 */
class Default_Model_DbTable_Users extends Zend_Db_Table_Abstract
                                    implements Default_Model_DbTable_UsersTableInterface
{
	/**
	 * @var string имя таблицы
	 */
	protected $_name = 'users';
	
    /**
     * Возвращает данные пользователя
     * в виде ассоциативного массива формата
     * 'id'                 => int 		$id                  Идентификатор пользователя
     * 'email'              => string 	$email               Адрес электронной почты пользователя
     * 'login'              => string 	$login               Логин пользователя
     * 'firstName'          => string 	$firstName           Имя пользователя
     * 'lastName'           => string 	$lastName            Фамилия пользователя
     * 'registrationDate'	=> string 	$registrationDate    Дата регистрации пользователя
     * @param int $id Идентификатор пользователя
     * @return mixed|null
     */
    public function findUser($id)
    {
        $select = $this->getAdapter()->select()
            ->from('users',
                  array('id'                => 'users_id', 
                        'email'             => 'users_login',
                        'login'	            => 'users_login',
                        'firstName'	        => 'users_firstName',
                        'lastName'          => 'users_lastName',
                        'registrationDate'  => 'users_registrationDate'
                  )
              )
            ->where('users_id = ?', $id);
        
        return $this->getAdapter()->query($select)->fetch();
    }
    
    /**
     * Возвращает данные пользователя
     * в виде ассоциативного массива формата
     * 'id'                 => int 		$id                  Идентификатор пользователя
     * 'email'              => string 	$email               Адрес электронной почты пользователя
     * 'login'              => string 	$login               Логин пользователя
     * 'firstName'          => string 	$firstName           Имя пользователя
     * 'lastName'           => string 	$lastName            Фамилия пользователя
     * 'registrationDate'	=> string 	$registrationDate    Дата регистрации пользователя
     * @param string $email Электронная почта пользователя
     * @return mixed|null
     */
    public function findUserByEmail($email)
    {
        $select = $this->getAdapter()->select()
            ->from('users',
                  array('id'                => 'users_id', 
                        'email'             => 'users_login',
                        'login'	            => 'users_login',
                        'firstName'	        => 'users_firstName',
                        'lastName'          => 'users_lastName',
                        'registrationDate'  => 'users_registrationDate'
                  )
              )
            ->where('users_email = ?', $email);
        
        return $this->getAdapter()->query($select)->fetch();   
    }
	
	/**
	 * Обновляет пароль пользователя
	 * @param int $id Идентификатор пользователя
	 * @param string $passwordHash hash код пароля
	 * @param string $passwordSalt salt пароля
	 * @return bool обнволены ли данные
	 */
	public function updateUserPassword($id, $passwordHash, $passwordSalt)
	{
	    $passwordData = array(
			'users_passwordHash'		=> $passwordHash,
		    'users_passwordSalt'		=> $passwordSalt
	    );
	    
        $where['users_id = ?'] = $id;
        
        $rowsAffected = $this->getAdapter()->update('users', $passwordData, $where);
        
        if ($rowsAffected > 0) {
            return true;
        } else {
            return false;
        }
	}
	
	/**
	 * Проверяет соответсвие указаного пароля с паролем пользователя
	 * @param int $id Идентификатор пользователя
	 * @param string $password Пароль
	 * @return bool Верен ли пароль
	 */
	public function checkPassword($id, $password)
	{
	    $select = $this->getAdapter()->select()
            ->from('users',
                   array('id'               => 'users_id'))
            ->where('users_id = ?', $id)
            ->where('users_passwordHash = ' . "MD5(CONCAT('" 
				. Zend_Registry::get('staticSalt')
				. "', MD5(?), users_passwordSalt))", $password);
        
        if ($this->getAdapter()->query($select)->fetch()) {
            return true;
        } else {
            return false;
        }
	}
	
	/**
	 * Проверяет наличие пользователей с указанным адресом электронной почты
	 * @param string $email Электронная почта
	 * @return bool Найдены ли соответсвующие записи
	 */
	public function checkEmailExistance($email)
	{
	    $select = $this->getAdapter()->select()
            ->from('users',
                   array('COUNT(users_id)'))
            ->where('users_email = ?', $email);
        
        if ((int)$this->getAdapter()->fetchOne($select) > 0 ) {
            return true;
        } else {
            return false;
        }
	}
}    